package routes

import (
	"domain-system/handlers"
	"domain-system/services"
	"os"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

// SetupPostRoutes 设置帖子相关路由
func SetupPostRoutes(router *gin.Engine, db *gorm.DB, openIMService *services.OpenIMService) {
	// 获取JWT密钥
	jwtSecret := os.Getenv("JWT_SECRET")
	if jwtSecret == "" {
		jwtSecret = "your-default-secret-key" // 默认密钥，生产环境必须修改
	}

	// 创建认证处理器以获取JWT中间件
	authHandler := handlers.NewAuthHandler(db, jwtSecret, openIMService)
	postHandler := handlers.NewPostHandler(db)

	// API v1 路由组
	v1 := router.Group("/api/v1")
	{
		// 帖子相关路由 - 公开访问（无需认证）
		publicPosts := v1.Group("/posts")
		{
			publicPosts.GET("/:id", postHandler.GetPost)                  // 获取帖子详情
			publicPosts.GET("/:id/comments", postHandler.GetPostComments) // 获取帖子评论
		}

		// 帖子相关路由 - 需要认证
		posts := v1.Group("/posts")
		posts.Use(authHandler.JWTMiddleware())
		{
			posts.POST("/", postHandler.CreatePost)                // 创建帖子
			posts.PUT("/:id", postHandler.UpdatePost)              // 更新帖子
			posts.DELETE("/:id", postHandler.DeletePost)           // 删除帖子
			posts.POST("/:id/like", postHandler.LikePost)          // 点赞帖子
			posts.DELETE("/:id/like", postHandler.UnlikePost)      // 取消点赞
			posts.POST("/:id/comments", postHandler.CreateComment) // 创建评论
		}

		// 圈子相关路由 - 公开访问（无需认证）
		publicCircles := v1.Group("/circles")
		{
			publicCircles.GET("/", postHandler.GetCircles)                            // 获取圈子列表
			publicCircles.GET("/:circle_id/posts", postHandler.GetPostsByCircle)      // 获取圈子帖子
			publicCircles.GET("/global/posts", postHandler.GetGlobalPosts)            // 获取全球圈帖子
			publicCircles.GET("/country/:country/posts", postHandler.GetCountryPosts) // 获取国家圈帖子
			publicCircles.GET("/city/:city/posts", postHandler.GetCityPosts)          // 获取城市圈帖子
		}

		// 标签相关路由 - 公开访问（无需认证）
		publicTags := v1.Group("/tags")
		{
			publicTags.GET("/", postHandler.GetTags)                    // 获取标签列表
			publicTags.GET("/:tag_id/posts", postHandler.GetPostsByTag) // 获取标签帖子
		}

		// 用户相关路由 - 混合访问
		// 公开访问的用户路由
		publicUsers := v1.Group("/users")
		{
			publicUsers.GET("/:user_id/posts", postHandler.GetUserPosts) // 获取用户帖子
		}

		// 需要认证的用户路由
		users := v1.Group("/users")
		users.Use(authHandler.JWTMiddleware())
		{
			users.POST("/:user_id/follow", postHandler.FollowUser)     // 关注用户
			users.DELETE("/:user_id/follow", postHandler.UnfollowUser) // 取消关注
		}
	}
}
